package bufferedoutputstream01;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * BufferedOutputStream类:
 *    该类实现缓冲的输出流,缓冲的目的就是为了提高写效率
 * 构造方法:
 * BufferedOutputStream(OutputStream out)
 *           创建一个新的缓冲输出流，以将数据写入指定的底层输出流。
 * 成员方法:
 *  void flush()
 *           刷新此缓冲的输出流。
 *
 * public void write(byte[] b)
 *          将 b.length 个字节写入此输出流。
 *  void write(byte[] b, int off, int len)
 *           将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
 *  void write(int b)
 *           将指定的字节写入此缓冲的输出流。
 *  BufferedOutputStream原理:
 *      它底层其实会开辟一个默认长度为8192字节数组,为了提高写效率
 *      但是我们write()方法会把字节写入到底层字节数组中,只有通过刷新或关流,才能将字节数组中的字节刷到文件中去
 */
public class BufferedOutputStream01 {
    public static void main(String[] args) throws IOException {
        //method01();
        //method02();
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("day23/8.txt"));
        byte[] bytes = "abcde".getBytes();
        bos.write(bytes,2,3);    // 写入 cde
        bos.close();
    }

    private static void method02() throws IOException {
        // 1.首先利用FileOutputStream 关联一个文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("day23/8.txt"));
        /*FileOutputStream fos = new FileOutputStream("day23/7.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);*/

        bos.write("abc".getBytes());  // 将abc写入文件中
        bos.close();
    }

    private static void method01() throws IOException {
        // 1.首先利用FileOutputStream 关联一个文件
        FileOutputStream fos = new FileOutputStream("day23/7.txt");
        // 2.将fos流通过构造方法传给BufferedOutputStream，相当于BufferedOutputStream对FileOutputStream进行包装
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //3.写一个字节
        bos.write(97);

        bos.close();  // 将文件输入 a
    }
}
